﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EControl.Modelo;
using System.Data.SqlClient;
using System.Windows;

namespace EControl.Controle
{
    class ClienteController
    {
        private string strConn = "Data Source=MARIA-PC\\SQLEXPRESS;Initial Catalog=dbestacionamento;Integrated Security=False;User ID=developer;Password=developer;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";

        public List<ClienteModel> pesquisar(string pesquisa)
        {
            try
            {
                SqlConnection sqlCon = new SqlConnection();
                sqlCon.ConnectionString = strConn;

                sqlCon.Open();

                string query = "select cliente_id, nome_razao, cpf_cnpj, is_juridico from cliente where cliente_id like '%" + pesquisa + "%' or nome_razao like '%" + pesquisa + "%' or cpf_cnpj like '%" + pesquisa + "%'";
                    
                SqlCommand cmd = new SqlCommand(query, sqlCon);
                SqlDataReader dr = cmd.ExecuteReader();

                List<ClienteModel> resultado = new List<ClienteModel>();
                ClienteModel cliente;

                while (dr.Read())
                {
                    cliente = new ClienteModel();

                    cliente.Id = dr["cliente_id"].ToString();
                    cliente.Nome = dr["nome_razao"].ToString();
                    cliente.Cpf = dr["cpf_cnpj"].ToString();
                    cliente.IsJuridico = (bool)dr["is_juridico"] ? "Pessoa jurídica" : "Pessoa física";
                    cliente.IsAtivo = "Sim";

                    resultado.Add(cliente);
                }

                sqlCon.Close();

                return resultado;
            }
            catch (Exception)
            {
                MessageBoxButton botao = MessageBoxButton.OK;
                MessageBox.Show("Ocorreu um erro no sistema, por favor entre em contato com o administrador do sistema ou tente novamente mais tarde", "Erro", botao);

                return null;
            }
        }

        public bool novoCliente(ClienteModel cliente)
        {
            try
            {
                SqlConnection sqlCon = new SqlConnection();
                sqlCon.ConnectionString = strConn;

                sqlCon.Open();

                string query = "insert into cliente (nome_razao, cpf_cnpj, is_juridico)";
                query += "values ('"+cliente.Nome+"', '"+cliente.Cpf+"', "+cliente.IsJuridico+")";

                SqlCommand cmd = new SqlCommand(query, sqlCon);
                int ok = cmd.ExecuteNonQuery();

                sqlCon.Close();

                if (ok > 0)
                {
                    MessageBoxButton botao = MessageBoxButton.OK;
                    MessageBox.Show("Cliente criado com sucesso!", "Aviso", botao);
                    return true;
                }
                else
                {
                    MessageBoxButton botao = MessageBoxButton.OK;
                    MessageBox.Show("Ocorreu um erro no sistema, por favor entre em contato com o administrador do sistema ou tente novamente mais tarde", "Erro", botao);
                    return false;
                }
            }
            catch (Exception)
            {
                MessageBoxButton botao = MessageBoxButton.OK;
                MessageBox.Show("Ocorreu um erro no sistema, por favor entre em contato com o administrador do sistema ou tente novamente mais tarde", "Erro", botao);

                return false;
            }
        }

        public ClienteModel pesquisaCliente(string id)
        {
            try
            {
                SqlConnection sqlCon = new SqlConnection();
                sqlCon.ConnectionString = strConn;

                sqlCon.Open();

                string query = "select cliente_id, nome_razao, cpf_cnpj, is_juridico from cliente where cliente_id = " + id;

                SqlCommand cmd = new SqlCommand(query, sqlCon);
                SqlDataReader dr = cmd.ExecuteReader();

                ClienteModel cliente = new ClienteModel();

                while (dr.Read())
                {
                    cliente.Id = dr["cliente_id"].ToString();
                    cliente.Nome = dr["nome_razao"].ToString();
                    cliente.Cpf = dr["cpf_cnpj"].ToString();
                    cliente.IsJuridico = (bool)dr["is_juridico"] ? "Pessoa jurídica" : "Pessoa física";
                }

                sqlCon.Close();

                return cliente;
            }
            catch (Exception)
            {
                MessageBoxButton botao = MessageBoxButton.OK;
                MessageBox.Show("Ocorreu um erro no sistema, por favor entre em contato com o administrador do sistema ou tente novamente mais tarde", "Erro", botao);

                return null;
            }
        }

        public bool atualizaCliente(ClienteModel cliente)
        {
            try
            {
                SqlConnection sqlCon = new SqlConnection();
                sqlCon.ConnectionString = strConn;

                sqlCon.Open();

                string query = "update cliente set nome_razao = '" + cliente.Nome + "', cpf_cnpj = '" + cliente.Cpf + "', is_juridico = " + cliente.IsJuridico + ", ts_atualizacao = GETDATE() ";
                query += "where cliente_id = " + cliente.Id;
               
                SqlCommand cmd = new SqlCommand(query, sqlCon);
                int ok = cmd.ExecuteNonQuery();

                sqlCon.Close();

                if (ok > 0)
                {
                    MessageBoxButton botao = MessageBoxButton.OK;
                    MessageBox.Show("Cliente atualizado com sucesso!", "Aviso", botao);
                    return true;
                }
                else
                {
                    MessageBoxButton botao = MessageBoxButton.OK;
                    MessageBox.Show("Ocorreu um erro no sistema, por favor entre em contato com o administrador do sistema ou tente novamente mais tarde", "Erro", botao);
                    return false;
                }
            }
            catch (Exception)
            {
                MessageBoxButton botao = MessageBoxButton.OK;
                MessageBox.Show("Ocorreu um erro no sistema, por favor entre em contato com o administrador do sistema ou tente novamente mais tarde", "Erro", botao);

                return false;
            }
        }
    }
}
